// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.mall;

import android.app.Activity;
import android.content.Context;

import com.eva.android.HttpService4A;
import com.x52im.mall.logic.shop.GoodsProvider;
import com.x52im.mall.logic.shop.ShopCarProvider;
import com.x52im.rbchat.MyApplication;

import java.util.Map;

/**
 * 本商城中要使用到的一些全局数据模型、常量、配置等。
 * 
 * @author Tony
 */
public abstract class MallGlobal
{
	/** 商品列表数据提供者对象 */
	private GoodsProvider goodsProvider = null;
	/** 购物车数据提供者对象 */
	private ShopCarProvider shopCarProvider = null;
	
	public static String HTTP_SERVER_CONTROLLER_URL_ROOT = null;
	public static String GOODS_PIC_HTTP_ROOT_URL = null;
	
	public MallGlobal(String HTTP_SERVER_CONTROLLER_URL_ROOT, String GOODS_PIC_HTTP_ROOT_URL)
	{
		this.HTTP_SERVER_CONTROLLER_URL_ROOT = HTTP_SERVER_CONTROLLER_URL_ROOT;
		this.GOODS_PIC_HTTP_ROOT_URL = GOODS_PIC_HTTP_ROOT_URL;
		
		goodsProvider = new GoodsProvider();
		shopCarProvider = new ShopCarProvider();
	}
	
	public String GOODS_PIC_HTTP_ROOT_URL()
	{
		return GOODS_PIC_HTTP_ROOT_URL; 
	}
	
	public GoodsProvider getGoodsProvider()
	{
		return goodsProvider;
	}
	
	public ShopCarProvider getShopCarProvider()
	{
		return shopCarProvider; 
	}
	
	/**
	 * 用户没有登陆时要进行的处理.
	 * <p>
	 * 子类重写本方法可以实现比如：当操作到需要登陆的功能时就跳到登陆界面等.
	 * <p>
	 * 默认本方法什么也不做.
	 */
	public void processForUserUnLogin(Activity a){
		//
	}
	
	/**
	 * 用户登陆UID不为null将被认为是该用户已经登陆.
	 * 
	 * @return
	 */
	public boolean isUserLogin()
	{
		return getLoginedUserUid() != null;
	}

	/**
	 * 返回商城使用程序所对应的登陆用户UID.
	 * <p>
	 * 用户UID只用在需要服务端Session认证的服务中，否则没意义.
	 * 
	 * @return
	 */
	public abstract String getLoginedUserUid();
	
	public abstract String getLoginedUserMail();
	
	public abstract Map<String, String> getPayPalExpressCheckOutConfig();
//	{
//		return "400002";
//	}
	/**
	 * 返回商城中需要服务端Session认证(需要先登陆)的服务所使用的Service.
	 * 
	 * @return
	 */
//	public abstract HttpService4A getAuthedService();
	public HttpService4A getAuthedService()
	{
		return HttpServiceFactory4AImpl.getInstance().getDefaultService();//AHttpServiceFactory.getDefaultService();
	}
	/**
	 * 返回商城中不需要服务端Session认证(不需要登陆)的服务所使用的Service.
	 * 
	 * @return
	 */
//	public abstract HttpService4A getNoNeedAuthedService();
	public HttpService4A getNoNeedAuthedService()
	{
		return HttpServiceFactory4AImpl.getInstance().getDefaultService();//AHttpServiceFactory.getDefaultService();
	}
	
	/**
	 * 获得商品图片缓存数据存放的根目录.
	 * @return
	 */
	public String getGoodPicsCachedDirPath()
	{
		return null;
	}
	
	/**
	 * 退出程序实现方法.
	 * <p>
	 * 本通用模块中什么也不用，留作子类实现类.
	 */
	public void doExit(Activity c){
		//
//		c.onBackPressed();
		c.finish();
	}

//	public HttpService4A getService()
//	{
//		return AHttpServiceFactory.getDefaultService();
//	}
	
	//-------------------------------------------------------------------------------
	/**
	 * 返回实现了 {@link RobotimeMallProvider}接口的Applicationp实例引用.
	 * 
	 * @param context
	 * @return
	 */
	public static synchronized RobotimeMallProvider getMallProviderInstance(Context context)
	{
		return MyApplication.getInstance2().getIMClientManager();
//		return (RobotimeMallProvider) context.getApplicationContext();
	}
	
	//-------------------------------------------------------------------------------
	/**
	 * 实施本接口的类将拥有提供 {@link MallGlobal}对象的能力.
	 * 
	 * @author Jack Jiang, 2013-09-27
	 * @version 1.0
	 */
	public interface RobotimeMallProvider
	{
		MallGlobal getRobotimeMall();
	}
}
